#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>

static void my_handler(int s)
{
	printf("[%d] Handler called.\n", getpid());
}

int main(void) {
	pid_t pid;
	
	signal(SIGUSR1, my_handler);

	pid = fork();
	if (-1 == pid) {
		perror("Error creating fork");
		exit(1);
	}

	if (0 == pid) {
		printf("[%d] Child\n", getpid());
		printf("Hello\n"); // 1. Hello
		kill(getppid(), SIGUSR1); // 2. 向父进程发送信号
		pause();

		printf("Byebye\n"); // 5. Byebye
		exit(0);
	}

	printf("[%d] Parent\n", getpid());
	pause();

	printf("World!\n"); // 3. World
	kill(pid, SIGUSR1); // 4. 向子进程发送信号

	wait(NULL);

	return 0;
}

